package programme;

import manager.Donnees;
import manager.Solution;

/**
 * Cette classe implémente le Problème d'Affectation Quadratique.
 * 
 * @author BERNARD Arthur, DELAMARCHE Jérôme, PAVAGEAU Max
 */
public class PAQ extends Programme {
	/**
	 * Constructeur basique.
	 * 
	 * @param donnees Les données du problème.
	 */
	public PAQ(Donnees donnees) {
		super(donnees);
	}
	
	/**
	 * Implémentation de la fonction objectif pour le PAQ:
	 * 	Somme des coûts de chaque unité solution[i][j] installée sur un site (i, j).
	 * 
	 * @param sol La solution à évaluer.
	 * @return La valeur de la fonction objectif pour la solution données.
	 */
	public double fonctionObjectif(Solution sol) {
		double valeur = 0, cout;
		
		for(int k = 0; k < donnees.taille; ++k) {
			for(int l = 0; l < donnees.taille; ++l)
				valeur += donnees.tabDist[k][l] * donnees.tabFlux[sol.getUniteAt(k+1)][sol.getUniteAt(l+1)];
		}
		
		return valeur;
	}
}
